package com.wtb.javatool.dao;


import com.wtb.javatool.entity.Table;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface TableMapper {
    /**
     * 查询表中所有桌位数据
     * @return
     */
    List<Table> listAllTables();

    /**
     * 获取桌位预定信息
     *
     * @param tableId 桌位ID
     * @return
     */
    List<Object> getTableReservations(Long tableId);

    /**
     * 添加桌位预定
     *
     * @param tableId 桌位ID
     * @param dishId 菜品ID
     * @param quantity 数量
     * @return
     */
    int addTableReservation(@Param("tableId") Long tableId,
                            @Param("dishId") Long dishId,
                            @Param("quantity") Integer quantity);

    /**
     * 删除桌位预定
     *
     * @param reservationId 预定ID
     * @return
     */
    int deleteTableReservation(@Param("reservationId") Long reservationId);

    /**
     * 更新桌位状态
     *
     * @param tableId 桌位ID
     * @param status 状态
     * @return
     */
    int updateTableStatus(@Param("tableId") Long tableId, @Param("status") Integer status);

    /**
     * 预定桌位
     *
     * @param tableId 桌位ID
     * @param customerName 客户姓名
     * @param customerPhone 客户电话
     * @return
     */
    int reserveTable(@Param("tableId") Long tableId,
                     @Param("customerName") String customerName,
                     @Param("customerPhone") String customerPhone);

    /**
     * 结束预定
     *
     * @param tableId 桌位ID
     * @return
     */
    int endReservation(@Param("tableId") Long tableId);

    /**
     * 执行预定
     *
     * @param tableId 桌位ID
     * @return
     */
    int executeReservation(@Param("tableId") Long tableId);

    /**
     * 更新预定状态
     *
     * @param reservationId 预定ID
     * @param status 状态
     * @return
     */
    int updateReservationStatus(@Param("reservationId") Long reservationId, @Param("status") Integer status);

    /**
     * 根据桌位ID删除所有预定信息
     *
     * @param tableId 桌位ID
     * @return
     */
    int deleteTableBookByTableId(@Param("tableId") Long tableId);
}
